//项目的总配置文件
var createError = require('http-errors');//http --error模块 记录http异常的
var express = require('express');  //express 包含了API
var path = require('path'); //path 是node的里面自带的模块，不需要安装
var cookieParser = require('cookie-parser'); //处理cookies
var logger = require('morgan'); //记录服务器日志的
//路由的配置文件
var indexRouter = require('./routes/index'); 
var usersRouter = require('./routes/users');
var commentRouter = require('./routes/comment')  //新配置路由别名  电影评论
var vueRouter = require("./routes/vue")

var connection = require("./utils/connect")
var app = express(); 
var session = require("express-session");
var cors = require("cors")

app.use(cors({
  "origin": "*",
  "methods": "GET,HEAD,PUT,PATCH,POST,DELETE",
  "preflightContinue": false,
  "optionsSuccessStatus": 204
}))
// view engine setup
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'ejs');

app.use(logger('dev'));  //记录日志的中间件
app.use(express.json());  //处理post请求的参数， application/json
app.use(express.urlencoded({ extended: false })); //post application/x-www-unlencoded 字符串
app.use(cookieParser());//处理cookies
app.use(express.static(path.join(__dirname, 'public')));//express.static 设置项目静态文件目录  以文件名读取。静态文件不经过路由，可以直接读取。
//设置项目的视图目录，__dirname 根目录  views视图


app.use(function(req,res,next){  //next 
  console.log("this is first middleware...")
  next() //表示进入下一个中间键
     
})

//引入session中间件，必须写到路由中间件的前面（用来保存用户登录后的所有数据）
app.use(session({
  name:"AppTest",
  cookie:{maxAge:1000*60*60},  // session 时长
  secret:"test",
  resave:false,
  saveUninitialized:true
}))


//设置路由中间键
app.use('/', indexRouter); // /wuhan  路由的别名  区别每个路由模块
app.use('/users', usersRouter);
app.use('/comment',commentRouter)   //路由名称 声明
app.use('/vue',vueRouter)


app.use(function(req,res,next){
  console.log("catch error ---middleware")
  next()
})

// catch 404 and forward to error handler
app.use(function(req, res, next) {
  next(createError(404));
});

// error handler
app.use(function(err, req, res, next) {
  // set locals, only providing error in development
  res.locals.message = err.message;
  res.locals.error = req.app.get('env') === 'development' ? err : {};

  // render the error page
  res.status(err.status || 500);
  res.render('error');//res.render 渲染ejs模板页面的
  //引入的是views/error.ejs  因为把views设置成了根目录，所以不用写前面的，后最不用写。
});

module.exports = app; //需要模块就要暴露出来
